# -*- encoding:utf-8 -*-
# @time:2022-11-18 16:21
# @Author : serein
# @Email: serein@qq.com
# @File:permission.py
# @Software: PyCharm

from functools import update_wrapper

from rest_framework.permissions import BasePermission
from django.contrib.auth.models import Group
from rest_framework.response import Response


class TeacherPermission(BasePermission):
    def has_permission(self, request, view):
        user = request.user#获取到当前发送请求的用户信息
        #判断身份 看一下是不是老师
        gourp = Group.objects.filter(name='老师').first()
        user_groups = user.groups.all()
        print(gourp,user_groups)
        return user.is_superuser or gourp in user_groups

# 个人权限
class ActiveUserPersmission(BasePermission):
    def has_permission(self, request, view):
        user = request.user
        return user.id == int(view.kwargs['pk'])

# 修改定义权限的装饰器
def wrap_premission(*permissions,validate_permission=True):
    def decorator(func):
        def wrapper(self,request,*args,**kwargs):
            self.permission_classes = permissions
            if validate_permission:
                self.check_permissions(request)
            return  func(self,request,*args,**kwargs)
        return  update_wrapper(wrapper,func)
    return decorator

def auto_user(func):
    def wrapper(self, request, *args, **kwargs):
        request.POST._mutable = True #让请求参数可以被修改
        request.data['user'] = request.user.id
        return func(self, request, *args, **kwargs)
    return wrapper


def update_auto_user(func):
    def wrapper(self, request, *args, **kwargs):
        # 判断当前操作的用户是不是这个数据的创建者
        # 设：文章的id为1，作者的id为3，当前登陆的用户id为5
        # 所有的没有被逻辑删除的文章数据集里面的id等于1，并且user用户为5

        res = self.get_queryset().filter(id=kwargs['pk'], user=request.user)
        if not res:
            return Response({'detail': '您没有修改的权限'})
        # 修改不可以更改作者，只能是当前的登陆用户
        request.POST._mutable = True  # 让请求参数可以被修改
        print(request.data['user'])
        request.data['user'] = request.user.id
        #这段代码就是无论你把user修改成什么，他都把user变回创建者的user，因为只有创建者才可以到这里
        print(request.data['user'])
        return func(self, request, *args, **kwargs)

    return wrapper


def destroy_auto_user(func):
    def wrapper(self, request, *args, **kwargs):
        # 判断当前操作的用户是不是这个数据的创建者
        # 设：文章的id为1，作者的id为3，当前登陆的用户id为5
        # 所有的没有被逻辑删除的文章数据集里面的id等于1，并且user用户为5
        res = self.get_queryset().filter(id=kwargs['pk'], user=request.user)
        if not res:
            return Response({'detail': '您没有修改的权限'})
        # 修改不可以更改作者，只能是当前的登陆用户
        request.POST._mutable = True  # 让请求参数可以被修改
        request.data['user'] = request.user.id
        return func(self, request, *args, **kwargs)

    return wrapper

